/*
 * This file is part of monitor_agent.
 * Copyright (c) 2018. Author: yinjia evoex123@gmail.com
 *
 * This program is free software: you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or (at your
 * option) any later version.  This program is distributed in the hope that it
 * will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
 * General Public License for more details.  You should have received a copy
 * of the GNU Lesser General Public License along with this program.  If not,
 * see <http://www.gnu.org/licenses/>.
 */

package module

import (
    "github.com/smartystreets-prototypes/go-disruptor"
    "io"
    "monitor_agent/inc"
    "time"
)

// disruptor procuder
func DisruptorPublish(writer disruptor.Writer, closer io.Closer, message string) {
    inc.Sequence = writer.Reserve(inc.Reservations)
    //fmt.Println(fmt.Printf("avg1test sequence:%v", inc.Sequence))
    inc.RingBuffer[inc.Sequence&inc.BufferMask] = message
    writer.Commit(inc.Sequence-inc.Reservations+1, inc.Sequence)
    _ = closer.Close()
}

// disruptor consumer
func (this DisruptorConsumer) Consume(lower, upper int64) {
    for ; lower <= upper; lower++ {
        message := inc.RingBuffer[lower&inc.BufferMask]
        ProcessMsgLine(message)
    }

}

type DisruptorConsumer struct{}

func CallDisruptorReader() {
    for true {
        inc.Reader.Read()
        time.Sleep(time.Second * 2)
    }
}
